/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.proyectos.bean;

import com.proyectos.ejb.PrEjbLocal;
import com.proyectos.ejb.PreEjbLocal;
import com.proyectos.model.Hitos;
import com.proyectos.model.HitosProyecto;
import com.proyectos.model.Preguntas;
import com.proyectos.model.PreguntasProyectos;
import com.proyectos.model.Proyectos;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Jose
 */
public class CtrProyectos implements Serializable {

    @EJB
    PrEjbLocal ejb;
    @EJB
    PreEjbLocal oejb_pre;
    String name;
    List<Proyectos> lista;
    Proyectos activeReg;
    CtrEntorno oentorno;
    boolean lnuevo;
    List<Hitos> hitosSeleccionados;

    public List<Hitos> getHitosSeleccionados() {
        return hitosSeleccionados;
    }

    public void setHitosSeleccionados(List<Hitos> hitosSeleccionados) {
        this.hitosSeleccionados = hitosSeleccionados;
    }
    

    public boolean isLnuevo() {
        return lnuevo;
    }

    public void setLnuevo(boolean lnuevo) {
        this.lnuevo = lnuevo;
    }
    
    

    public CtrEntorno getOentorno() {
        return oentorno;
    }
    public void setOentorno(CtrEntorno oentorno) {
       this.oentorno = oentorno;
    }

    public CtrProyectos() {
    }

    public Proyectos getActiveReg() {
        return activeReg;
    }

    public void setActiveReg(Proyectos activeReg) {
        this.activeReg = activeReg;
    }
    
    public void selectPrepro(BigDecimal id)
    {
        try{
            this.lnuevo = false;
            this.activeReg = this.ejb.get(id);
            
            
            Map<String, Object> options = new HashMap<String, Object>();
            options.put("modal", true);
            options.put("draggable", true);
            options.put("resizable", false);
            options.put("contentHeight", 220);
            options.put("contentWidth", 600);
            RequestContext.getCurrentInstance().openDialog("/selecPreguntas.xhtml", options, null);
        } catch (Exception ex) {
            Logger.getLogger(CtrProyectos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void selectHit(BigDecimal id)
    {
        try{
            this.lnuevo = false;
            this.activeReg = this.ejb.get(id);
            
            this.hitosSeleccionados = new ArrayList<Hitos>();
            for (HitosProyecto hpr:this.activeReg.getVhitos())
            {
                this.hitosSeleccionados.add(hpr.getNhito());
            }
               Map<String, Object> options = new HashMap<String, Object>();
            options.put("modal", true);
            options.put("draggable", true);
            options.put("resizable", false);
            options.put("contentHeight", 300);
            options.put("contentWidth", 180);
            RequestContext.getCurrentInstance().openDialog("/selecHitos.xhtml", options, null);
        } catch (Exception ex) {
            Logger.getLogger(CtrProyectos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public void edit(BigDecimal id) {
        try {
            this.lnuevo = false;
            this.activeReg = this.ejb.get(id);
          
            Map<String, Object> options = new HashMap<String, Object>();
            options.put("modal", true);
            options.put("draggable", true);
            options.put("resizable", false);
            options.put("contentHeight", 360);
            options.put("contentWidth", 600);
            RequestContext.getCurrentInstance().openDialog("/mantProyectos.xhtml", options, null);
        } catch (Exception ex) {
            Logger.getLogger(CtrProyectos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void nuevo() {
        try {
            this.lnuevo = true;
            this.activeReg = new Proyectos();
            this.activeReg.setNcarrera(this.oentorno.getCarrera());

            Map<String, Object> options = new HashMap<String, Object>();
            options.put("modal", true);
            options.put("draggable", true);
            options.put("resizable", false);
            options.put("contentHeight", 360);
            options.put("contentWidth", 600);
            RequestContext.getCurrentInstance().openDialog("/mantProyectos.xhtml", options, null);
        } catch (Exception ex) {
            Logger.getLogger(CtrCarreras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    
    public void selectPreguntas(ActionEvent event) {
        try{
          this.ejb.save(activeReg);
            this.buscar();
            RequestContext.getCurrentInstance().closeDialog(null);
        }catch(Exception e)
        {
          this.addMessage(e.getMessage());   
        }
    }
    
    public void selectHitos(ActionEvent event) {
        try{
            for (Hitos hit:this.hitosSeleccionados)
            {
                HitosProyecto hpr = new HitosProyecto();
                hpr.setNhito(hit);
                hpr.setNproyecto(activeReg);
                int l= this.activeReg.getVhitos().indexOf(hpr);
                if (l<0)
                {
                    this.activeReg.getVhitos().add(hpr);
                }
            }
            List<HitosProyecto> borrar= new ArrayList<HitosProyecto>();
            for (HitosProyecto hpr:this.activeReg.getVhitos())
            {
                int l= this.hitosSeleccionados.indexOf(hpr.getNhito());
                if (l<0)
                {
                    borrar.add(hpr);
                }
            }
            for (HitosProyecto hpt:borrar)
            {
                this.activeReg.getVhitos().remove(hpt);
            }    
            this.ejb.save(activeReg);
            this.buscar();
            RequestContext.getCurrentInstance().closeDialog(null);
        } catch (Exception ex) {
            this.addMessage(ex.getMessage());
        }
    }
    public void save(ActionEvent event) {
        try {
            if (this.lnuevo) {
                this.ejb.add(activeReg);
            } else {
                this.ejb.save(activeReg);
            }
             this.buscar();
        RequestContext.getCurrentInstance().closeDialog(null);
        } catch (Exception ex) {
            this.addMessage(ex.getMessage());
        }
       
    }

    public void delete(ActionEvent event) {
        try {
            this.ejb.delete(activeReg.getNcodigo());
        } catch (Exception ex) {
            Logger.getLogger(CtrProyectos.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.buscar();
        RequestContext.getCurrentInstance().closeDialog(null);

    }

    public List<Proyectos> getLista() {
        return lista;
    }

    public void setLista(List<Proyectos> lista) {
        this.lista = lista;
    }

    public void addMessage(String summary) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERROR", summary);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void buscar() {
        TreeMap vparametros = new TreeMap();
        if (name != null && !name.isEmpty()) {
            vparametros.put("cnombre", "%" + name.toUpperCase() + "%");
        } else {
            vparametros.put("cnombre", "%");
        }
            vparametros.put("ncarrera",this.oentorno.carrera);
        lista = this.ejb.query("Proyectos.findByName", vparametros);
    }

    public void buscar_todo() {

      
       this.buscar();

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Proyectos> getVlista() {
        return this.ejb.query("Proyectos.findAll", new TreeMap());

    }

     public List<PreguntasProyectos> getPreguntas() {
         TreeMap vparametros=new TreeMap();
         vparametros.put("ncarrera",this.oentorno.getCarrera());
         List<Preguntas> vpreg= this.oejb_pre.query("Preguntas.findAll", vparametros);
         for (Preguntas pre:vpreg)
         {
             PreguntasProyectos pro= new PreguntasProyectos();
             pro.setNpregunta(pre);
             pro.setNproyecto(activeReg);
             int l= this.activeReg.getVpreguntas().indexOf(pro);
             if (l<0)
             {
                 this.activeReg.getVpreguntas().add(pro);
             }
         }
         return this.activeReg.getVpreguntas();
     }
     
      
}
